package com.songshuai.webapi.permission.dao;

import com.songshuai.webapi.baseapi.dto.feign.response.AccountInfoResDto;
import com.songshuai.webapi.baseapi.dto.feign.response.AccountPageLIstResDto;
import com.songshuai.webapi.baseapi.dto.feign.response.AccountInfoListResDto;
import com.songshuai.webapi.permission.dto.po.RolesLoginPojo;
import com.songshuai.webapi.permission.dto.po.UserHasPermissionPojo;
import com.songshuai.webapi.permission.dto.request.UserRelateRoleReqDto;
import com.songshuai.webapi.permission.dto.request.UserUpdateReqDto;
import com.songshuai.webapi.permission.dto.response.FunctionsLoginResDto;
import com.songshuai.webapi.permission.dto.response.NavAndFuncLoginResDto;
import com.songshuai.webapi.permission.model.YxDepartmentUser;
import com.songshuai.webapi.permission.model.YxHomepageConfig;
import com.songshuai.webapi.permission.model.YxNavigationFunction;
import com.songshuai.webapi.permission.model.YxUsers;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface YxUsersMapper {

    //根据功能key获取功能菜单关联
    List<YxNavigationFunction> queryNavFuncRelation(@Param("list")List<FunctionsLoginResDto> funcList);

    //根据id查询用户
    YxUsers queryUserById(@Param("id") Integer id);

    //删除用户app关联
    int deleteUserClientRelation(@Param("id") Integer id);

    //新增用户app关联
    int addUserClientRelation(UserUpdateReqDto parmDto);

    //修改用户
    int updateUser(YxUsers entity);

    //删除用户部门关联
    int deleteDepartmentUserRelation(YxDepartmentUser entity);

    //查询用户部门关系是否存在
    int queryDepartUserByParam(@Param("userId") Integer userId, @Param("departmentId") Integer departmentId);

    //员工离职/入职改变，0入职，1离职
    int updateUserLeave(YxUsers entity);

    //查询超级管理员的角色
    List<RolesLoginPojo> queryAdminLoginRolesList(@Param("userId") Integer userId);

    //查询登录用户的角色
    List<RolesLoginPojo> queryLoginRolesList(@Param("userId") Integer userId, @Param("loginId") Integer loginId);

    //查询登录用户的一级菜单（超级管理员）
    List<NavAndFuncLoginResDto> queryAdminLoginParentNavList(@Param("appId") Integer appId);

    //查询登录用户的一级菜单
    List<NavAndFuncLoginResDto> queryLoginParentNavList(@Param("loginId") Integer loginId, @Param("appId") Integer appId);

    //查询登录用户非一级菜单以及功能
    List<NavAndFuncLoginResDto> queryAdminLoginAllChildNavList(@Param("appId") Integer appId);

    //查询登录用户非一级菜单以及功能
    List<NavAndFuncLoginResDto> queryLoginAllChildNavList(@Param("loginId") Integer loginId, @Param("appId") Integer appId);

    //查询当前用户的菜单以及功能
    Set<String> queryUserCheckNavList(@Param("userId") Integer userId, @Param("appId") Integer appId);

    //删除用户角色关联
    int deleteUserRoleRelation(@Param("userId") Integer userId);

    //新增用户角色关联
    int addUserRoleRelation(@Param("loginId") Integer loginId,@Param("reqDto") UserRelateRoleReqDto reqDto);

    //新增用户菜单关联
    int addUserNavigationRelation(Map<String,Object> params);

    //新增用户菜单功能关联
    int addUserNavFuncRelation(Map<String,Object> params);

    //重置密码
    int resetPwd(YxUsers entity);

    //根据主键查询用户信息
    YxUsers selectByPrimaryKey(Integer id);

    //根据主键修改用户信息
    int updateByPrimaryKeySelective(YxUsers yxUsers);

    //根据用户id，appId查询首页配置
    YxHomepageConfig queryHomePageByUserId(@Param("userId")Integer userId,@Param("appId")Integer appId);

    //根据userId，appId，type删除首页配置
    int deleteHomePage(YxHomepageConfig entity);

    //新增首页配置
    int addHomePage(YxHomepageConfig entity);

    //根据email查询用户基本权限
    UserHasPermissionPojo getUserPermissionInfoByEmail(String email);

    //根据mobile查询用户基本权限
    UserHasPermissionPojo getUserPermissionInfoByMobile(String mobile);

    //根据参数查询用户是否存在
    YxUsers queryUserByParam(YxUsers yxUsers);

    List<AccountPageLIstResDto> selectByMobileOrName(@Param("position")Integer position, @Param("account")String account, @Param("status")Integer status, @Param("campusId")Integer campusId);

    /**
     * 根据条件插入
     * @param yxUsers
     * @return
     */
    int insertSelective(YxUsers yxUsers);

    /**
     * 根据id查询信息
     * @param id
     * @return
     */
    AccountInfoResDto selectUserById(Integer id);

    /**
     * 根据实体类查询
     * @param yxUsers
     * @return
     */
    YxUsers selectByEntity(YxUsers yxUsers);

    //根据多个id查询用户信息
    List<AccountInfoListResDto> queryUserInfoByIds(@Param("list") List<Integer> userIds);

    //根据校区查询出非userId的用户信息
    List<AccountInfoListResDto> queryUserInfoListByCampusId(@Param("userId") Integer userId,@Param("campusId") Integer campusId);

    //根据真实姓名模糊查询用户信息
    List<AccountInfoListResDto> queryUserInfoListByTrueName(@Param("trueName") String trueName,@Param("campusId") Integer campusId);
}